原文連結:Declaring a Structured Data Object
structure變數是一種ABAP的特殊物件及資料型別。之前所學習到的變數都只能存單一的值,但當我們從資料庫讀一筆資料時,舉例而言,讀取航班資訊,會包含出發機場與抵達機場這兩個獨立的變數值,如果想把這兩個資料視為同一組資料存在一起,可以使用 structure變數,拿來操作表格資料十分好用。
可以將structure視為能儲存一列(row)表格資料的結構,因此structure中能存有多個欄位格。舉例而言,如上圖中connection_full 這個structure內可包含航班資料表不同欄位的值,並且對欄位值進行與普通變數相同的操作。
structure有許多宣告方式,大致有以下幾種:
TYPE
建立structure
的自訂義型別,再根據該型別建立structure實體。以下分別介紹全域與區域的structure型別。
全域structure是可以在任意處使用的資料型別,例如用來定義變數訊息的SYMSG。
DATA message TYPE SYMSG.
當游標移至該型別並按下F2時,可以看到SYMSG structure中包含了七個變數元件,以及他們各自的名稱、類型與描述。按下F3則會直接跳轉至定義該structure型別的程式碼。
定義structure的語法與定義表格非常相似,在DEFINE STRUCTURE
後命名structure,並用大括號{}
來列出structure中的欄位資料。在欄位資料名稱後通常會接的是char、int等常見的資料型別,但也能接structure TYPE,可以形成成巢狀的structure結構。
額外程式碼則會定義在DEFINE STRUCTURE
之前,用標籤為structure添加額外屬性 。
宣告本地的structure型別分成兩種方法。
1.用TYPES
定義local的structure型別,以TYPES BEGIN OF <structure type name>
開頭,以 TYPES END OF <structure type name>
結尾,並在中間定義欄位資料。
*宣告structure型別
TYPES BEGIN OF st_connection.
TYPES airport_from_id TYPE /dmo/airport_from_id.
TYPES airport_to_id TYPE /dmo/airport_to_id.
TYPES carrier_name TYPE /dmo/carrier_name.
TYPES END OF st_connection.
*建立structure
DATA connection TYPE st_connection.
:
,分別以BEGIN OF
還有END OF
作為開頭與結尾,並且中間定義欄位資料時以逗號,
作劃分。*宣告structure型別(簡短寫法)
TYPES: BEGIN OF st_connection,
airport_from_id TYPE /dmo/airport_from_id,
airport_to_id TYPE /dmo/airport_to_id,
carrier_name TYPE /dmo/carrier_name,
END OF st_connection.
*建立structure
DATA connection TYPE st_connection.
以上宣告方式建立的structure,僅能在當前程式作用域中執行。
另外,除了變數,structure中也能定義欄位常數,但必需在宣告常數時就賦值。
在Debugger模式下,可以透過兩種方式檢視structure與其欄位變數:
變數預覽(游標移至structure上方)
在編輯器的structure名稱上方hover,即會顯示該structure底下欄位變數的值
在變數視窗中顯示(雙擊structure)
進一步雙擊structure名稱後將開啟變數視窗,除了欄位變數值,可以進一步看到資料型別及欄位長度的資訊。
明天會來介紹更多structure的詳細運作!